package com.todo.content.infrastructure.repository;


import com.todo.common.common.entity.response.page.PageResult;
import com.todo.content.infrastructure.entity.condition.ContentInfoCondition;
import com.todo.content.infrastructure.entity.domain.ContentDetailDO;
import com.todo.content.infrastructure.entity.po.ContentBaseRelationPO;
import com.todo.content.infrastructure.entity.po.ContentInfoPO;

import java.util.List;

/**
 * (ContentInfo)表服务接口
 *
 * @author zhangwenxiang
 * @since 2024-03-04 21:10:04
 */
public interface ContentInfoRepository {

    /**
     * 多条件查询内容信息列表
     *
     * @param contentInfoCondition
     * @return
     */
    PageResult<ContentInfoPO> queryContentInfoByCondition(ContentInfoCondition contentInfoCondition);

    /**
     * 多条件查询内容信息列表
     *
     * @param contentInfoCondition
     * @return
     */
    Long queryCountByCondition(ContentInfoCondition contentInfoCondition);

    /**
     * 新增内容信息
     *
     * @param contentDetailDO
     * @return
     */
    Boolean insertContentDetail(ContentDetailDO contentDetailDO);

    /**
     * 根据主键ID更新内容信息
     *
     * @param contentDetailDO
     * @return
     */
    Boolean updateContentDetailById(ContentDetailDO contentDetailDO, Boolean updateCount);

    /**
     * 根据主键id删除内容信息
     *
     * @param id
     * @return
     */
    Boolean removeContentById(Long id);

    /**
     * 根据主键id查询内容信息
     *
     * @param id
     * @return
     */
    ContentInfoPO queryContentInfoPOById(Long id);

    /**
     * 根据主键id查询详情
     *
     * @param id
     * @return
     */
    ContentDetailDO queryContentDetailById(Long id);

    /**
     * 根据内容id查询内容基础关联列表
     *
     * @param contentId
     * @return
     */
    List<ContentBaseRelationPO> queryContentBaseRelationPOByContentId(Long contentId);

    /**
     * 更新内容状态
     *
     * @param contentId
     * @param oldType
     * @param newType
     * @return
     */
    Boolean updateContentStatus(Long contentId, Integer oldType, Integer newType);

    /**
     * 根据内容id列表查询内容信息
     *
     * @param contentIdList
     * @return
     */
    List<ContentInfoPO> queryContentInfoByIdList(List<Long> contentIdList);

    /**
     * 根据内容Id删除内容信息
     *
     * @param contentIdList
     * @return
     */
    Boolean removeContentByIdList(List<Long> contentIdList);

    /**
     * 调整内容是否私有
     *
     * @param contentId
     * @param type
     * @return
     */
    Boolean updateContentPrivateType(Long contentId, Integer type);

    /**
     * 调整内容是否公开
     *
     * @param contentId
     * @param type
     * @return
     */
    Boolean updateContentCommitType(Long contentId, Integer type);
}
